package com.nb.vo;

import com.mybatisflex.annotation.ColumnAlias;
import com.mybatisflex.annotation.RelationOneToMany;
import com.mybatisflex.annotation.RelationOneToOne;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

@Data
public class UserVO {

    @ColumnAlias("id")
    private Long userId;
    private String username;
    private String realName;
    private Integer status;
    @RelationOneToOne(
            targetTable = "sys_dept",
            selfField = "deptId",       // 当前VO的部门ID字段
            targetField = "id",     // 目标表字段
            valueField = "name"     // 要映射的目标字段
    )
    private String deptName;
    private Long deptId;
    @RelationOneToMany(
            joinTable = "sys_role_user",      // 中间表名称
            targetTable = "sys_role",         // 目标表名称
            targetField = "id",           // 角色表的主键字段
            // 主表关联配置（当前实体 -> 中间表）
            selfField = "userId",             // 用户ID字段（当前实体）
            joinSelfColumn = "user_id",       // 中间表中对应的用户ID字段
            // 目标表关联配置（中间表 -> 角色表）
            joinTargetColumn = "role_id" ,   // 中间表中对应的角色ID字段
            valueField = "id"
    )
    private List<Long> roleIds;
    @RelationOneToMany(
            joinTable = "sys_role_user",      // 中间表名称
            targetTable = "sys_role",         // 目标表名称
            targetField = "id",           // 角色表的主键字段
            // 主表关联配置（当前实体 -> 中间表）
            selfField = "userId",             // 用户ID字段（当前实体）
            joinSelfColumn = "user_id",       // 中间表中对应的用户ID字段
            // 目标表关联配置（中间表 -> 角色表）
            joinTargetColumn = "role_id" ,   // 中间表中对应的角色ID字段
            valueField = "name"
    )
    private List<String> roleNames;
    private LocalDateTime createdTime;
    private String phone;
    private String email;
    private String idCard;
    private LocalDateTime updatedTime;

}
